<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script type="text/javascript">
    // 新建string对象
    var s = new String('Couch potato');

    // 用于字符串大小写转化的方法。
    console.log(s.toUpperCase()); // 大写
    console.log(s.toLowerCase()); // 小写

    // 返回我们制定字符串的位置，这与中括号的作用相当（因为字符串本身就是一个字符数组）
    console.log(s.charAt(0));
    console.log(s[0]);

    // 如果我们传递给charAt方法的位置并不存在，他就会返回一个空字符串。
    console.log(s.charAt(1001));

    // indexOf方法可以帮助我们实现字符串内部搜索，该方法在遇到匹配字符的时候回返回该字符的位置。（索引是从0开始）
    console.log(s.indexOf('o'));

    // 另外我们还可以给定第二个参数指定搜索开始的位置
    console.log(s.indexOf('o', 2));

    // 如果我们想从末端开始搜索，就使用lastIndexOf()方法（返回的依然是从前向后开始计算的）
    console.log(s.lastIndexOf('o'));

    // 还可以用于字符串匹配搜索，并且是区分大小写的。
    console.log(s.indexOf('Couch'));

    // 如果找不到就返回-1
    console.log(s.indexOf('couch'));

    // 如果我们需要进行一次大小写无关的搜索，可以将字符串转换为小写后再执行搜索。
    console.log(s.toLowerCase().indexOf('couch'));

    // slice和substring这两个方法都是用来返回目标字符串区间的
    console.log(s.slice(1,5));
    console.log(s.substring(1,5));

    // 这两个方法的第二个参数指定的都是区间的末端位置，而不是该区间的长度。这两个方法的不同之处是在于对负值参数的处理方式，substring方法会将负数视为0，而slice会将它与字符串的长度相加。因此，如果我们传给他们的参数是（1，-1）的话，他们的实际情况分别是: substring(1,0)/slice(1,s.length-1);
    console.log(s.slice(1,-1));
    console.log(s.substring(1,-1));

    // split方法可以根据我们的所传递的分割字符串，将目标字符串分割成一个数组。
    console.log(s.split(' '));

    // join()是反操作，是将一个数组组成一个字符串
    console.log(s.split(' ').join(' '));

    // concat()方法通常用于合并字符串，他的功能与基本字符串类型的+操作符相似
    console.log(s.concat('es'));

    // 需要注意的是，上面所有的方法都是返回一个新的基本字符串，他们所做的任何修改都不会改动源字符串。所有的方法调用都不会影响原始字符串的值
</script>
</body>
</html>
